/**
 * 页面动态提示帮助组件
 * 
 * @type
 */
Ccay.Component.Helper = {
	/** 记录用户未读取过的提示帮助信息 */
	helpers : {},
	init : function() {
		if (Ccay.Config.Helper.open
				&& Ccay.Personalized.global.common.helper !== "0") {
			// 延迟请求加载helper数据
			Ccay.Core.log("动态帮助启动 将延时请求帮助信息数据-----");
			setTimeout(function() {
				Ccay.Core.ajax({
					url : Ccay.Config.Helper.service,
					loading : false,
					sysauto : true,
					success : function(helpers) {
						Ccay.Core.log("请求帮助信息数据成功，总帮助数据条数：" + helpers.length);
						if (helpers.length > 0) {
							workspaceVO.helpers = helpers;
							try {
								// 得到组件全局缓存对象
								var sysHelpers = Ccay.Component.Helper.helpers;
								// 将数据库的配置数据，转换成js对象
								for (var i = 0, helper; helper = helpers[i]; i++) {
									sysHelpers[helper.helperUrl] = Ccay.DataHelper
											.toJson(helper.helperCfg);
									sysHelpers[helper.helperUrl].helperId = helper.helperId;
								}
								var url = location.hash.substr(2);
								if (url) {
									Ccay.Component.Helper.showHelper(url,
											Ccay.Page.getContentPanel());
								}
							} catch (e) {
								Ccay.Core.log("helper 数据反序列化出错，可能存在不正常的配置！" 
										+ helper && helper.helperUrl);
							}
						}
					},
					error : function() {
						Ccay.Core.log("请求帮助信息数据失败，发生异常！");
						return true;
					}
				})
			}, Ccay.Config.Helper.delayInit)
		}
	},

	/**
	 * 显示页面帮助
	 * 
	 * @param {}
	 *            url 地址
	 * @param {}
	 *            panel 容器
	 */
	showHelper : function(url, panel) {

		if (workspaceVO.helpers && workspaceVO.helpers.length > 0) {
			setTimeout(function() {
						var helperItems = Ccay.Component.Helper.helpers[url
								.toLowerCase()];
						if (helperItems && helperItems.readed != true
								&& helperItems.length > 0) {
							Ccay.Core.log("准备显示动态帮助,URL:{0}".format(url));
							Ccay.Component.Helper.showTip(helperItems, 0,
									panel, url.toLowerCase());
						}
					}, 0);
		}
	},

	/**
	 * 
	 * @param {}
	 *            helperItems 提示集合
	 * @param {}
	 *            i 当前提示索引
	 * @param {}
	 *            panel 提示父容器
	 */
	showTip : function(helperItems, i, panel, url) {
		// 提示了第一个提示后，将数据库中该项帮助提示标示为已读，下次就不会读取了
		if (i === 0) {
			Ccay.doPost(Ccay.Config.Helper.readService, {
						helper : {
							helperId : helperItems.helperId
						}
					}, function() {
					}, function() {
						//提示了第一个提示后，将不再插入已提示信息
						return true;
					}, null, false);
			helperItems.readed = true;
		};
		var item = helperItems[i];
		if (item) {
			Ccay.Core.log("准备显示动态帮助,Target:{0}".format(item.target));
			var helpTarget;
			if (item.target && item.target.indexOf("!") == 0) {
				helpTarget = $(item.target.substr(1));
			} else {
				helpTarget = panel.find(item.target);
			}
			helpTarget.fadeOut(1000).fadeIn(1000).ccayTip({
				content : item[workspaceVO.currentLanguage]
						? item[workspaceVO.currentLanguage]
						: item.message,
				action : "once",
				autoClose : true,
				fnClose : function() {
					Ccay.Component.Helper.showTip(helperItems, i + 1, panel,
							url);
				}
			});
		} else {
			// 当前配置项 提示完毕,删除缓存中的配置项目
			Ccay.Component.Helper.helpers[url] = void 0;
		}

	}

};
